package thread;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.locks.LockSupport;

/**
 * 打断方法【interrupt】和【park】方法的组合使用。
 */
@Slf4j(topic = "c.InterruptParkTest")
public class InterruptParkTest {

    public static void main(String[] args) throws InterruptedException {
        testPark();
    }

    private static void testPark() throws InterruptedException {
        Thread t1 = new Thread(()->{
            log.debug("park...");
            //park方法，会暂停下面方法的调用。
            LockSupport.park();
            log.debug("unpark...");
            //第三个特性：3：如果想要下面的【park】方法成功停止。
            //  不能使用【isInterrupted】方法，需要使用【interrupted】方法，这个方法，会重置【打断状态为false】。
//            log.debug("打断状态为：{}",Thread.currentThread().isInterrupted());//这个方法，不会重置打断状态，所有后面的【park】方法，不会停止。
            log.debug("打断状态为：{}",Thread.interrupted()); //这个方法，会重置打断状态，所有后面的【park】可以停止该线程。

            //特性2：【park】方法，不能停止，打断状态为【true】的线程。
            LockSupport.park();
            log.debug("unpark...");
        },"t1");

        t1.start();

        Thread.sleep(1000);
        //第一个特性：1：调用【interrupt】方法，会打断【park】方法，所有【park】后续的方法可以继续执行。
        //  正常情况下，是不会执行的。
        t1.interrupt();
    }
}
